package com.nowcoder.community.dao;

import com.nowcoder.community.entity.DiscussPost;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * @author 花木凋零成兰
 * @date 2024/3/4 20:21
 */
@Mapper
public interface DiscussPostMapper {

    /**
     * 用户主页 帖子分页查询
     *
     * @param userId
     * @param offset
     * @param limit
     * @param orderMode
     * @return
     */
    List<DiscussPost> selectDiscussPosts(int userId, int offset, int limit, int orderMode);

    /**
     * 获取用户主页 帖子数目
     * @param userId
     * @return
     */
    // @Param注解用户给参数起别名
    // 如果只有一个参数 并且在<if>中使用 则必须加别名
    int selectDiscussPostRows(@Param("userId") int userId);

    /**
     * 发布帖子
     * @param discussPost
     * @return
     */
    int insertDiscussPost(DiscussPost discussPost);

    /**
     * 查看帖子详情
     * @param id
     * @return
     */
    @Select("select * from discuss_post where id = #{id}")
    DiscussPost selectDiscussPostById(int id);

    /**
     * 更新帖子 评论数目
     * @param id
     * @param commentCount
     * @return
     */
    @Update("update discuss_post set comment_count = #{commentCount} where id = #{id}")
    int updateCommentCount(int id, int commentCount);

    /**
     * 更改帖子类型：0-普通， 1-置顶
     * @param id 帖子id
     * @param type 修改为类型
     * @return
     */
    @Update("update discuss_post set type = #{type} where id = #{id}")
    int updateType(int id, int type);

    /**
     * 修改帖子状态：0-正常; 1-精华; 2-拉黑
     * @param id
     * @param status
     * @return
     */
    @Update("update discuss_post set status = #{status} where id = #{id}")
    int updateStatus(int id, int status);

    /**
     * 更新帖子分数
     * @param id
     * @param score
     * @return
     */
    @Update("update discuss_post set score = #{score} where id = #{id}")
    int updateScore(int id, double score);

    /**
     * 批量插入帖子数据
     * @param discussPosts
     */
    void insertBatchDiscussPost(List<DiscussPost> discussPosts);

}
